Traditional computer systems are designed with applications executing in an environment specified by an operating system. The operating system in turn executes directly on hardware. In order to use devices in the hardware, an operating system installs a corresponding device driver. Thus, when applications want to use the device, the operating system uses the device driver to communicate with the device.
Advances in computer science have led to the virtualization of hardware. Specifically, rather than an operating system directly using resources of hardware, the operating system executes in a virtual environment with virtual hardware resources. One such virtual environment is created by the use of domains (or other similar virtualization technology). Domains provide a method for containment of software and a separation of software from hardware. For example, a domain may be used to prevent software failures from causing another failure in the system. Thus, in a virtualized environment, applications execute in an environment created by the operating system. Specifically when using domains, applications execute on virtual hardware resources provided by a guest domain.
Platform virtualization is the process in which a host (“host”) may execute virtual machines that simulate computer hardware for one or more guest domains (“guests”). Each guest is delegated a subset of the simulated hardware resources managed by the host. For example, a host managing dual processors may assign one of the processors to be used exclusively by a guest. Platform virtualization allows for improved management of information technology infrastructure. More specifically, platform virtualization maximizes hardware resource utilization and reduces operating costs.
Another configuration involving virtualization involves physical computer systems that include virtual machines that are configured to interact with a network (i.e., communicate with other physical computers and/or virtual machines in the network). Network traffic is transmitted over a network, such as the Internet, from a sending system (e.g., a computer system) to a receiving system (e.g., a computer system) via a physical network interface card (NIC). The NIC is a piece of hardware found in a typical computer system that includes functionality to send and receive network traffic. Hardware resources like NICs, memory, and CPUs are generally bound to a physical unit (i.e., a server) and the virtual machines executing on that unit are limited to the resources available on the unit. When a virtual machine demands more resources than is available on the unit upon which it is executing, a method for allowing the virtual machine to migrate to a unit with more resources available with minimal impact to the applications that are executing on the virtual machine is required.